#include<stdio.h>
#include<stdlib.h>

/*
int fseek(FILE *stream, long offset, int whence);
功能：用来重新定义文件流的读写光标位置
	参数：
		stream：表示要操作哪个文件流
         offset：文件偏移量
         whence：定位方式
    
SEEK_SET ： 基于文件开头的位置
新光标的位置 = 文件开头 + offset (>=0)
									
SEEK_CUR : 基于当前位置
新光标的位置 = 当前的位置 + offset (可正可负)
							
SEEK_END ：基于文件的末尾位置
新光标的位置 = 文件末尾 + offset (可正可负)	
返回值：
		成功，返回0
		失败，返回-1，同时errno被设置


*/



void mergefile(char *filename1,char *filename2)
{
	FILE *fp1,*fp2;
	char ch;
	//文件不存在，则创建
	//文件存在，打开后，原始读的位置在文件开头，原始写的位置在文件末尾
	if((fp1=fopen(filename1,"a+"))==NULL)
	{
		printf("fopen %s error!\n",filename1);
		exit(0);
	}
	printf("file1:\n");
	ch=fgetc(fp1);
	while(ch!=EOF)
	{
		putchar(ch);
		ch=fgetc(fp1);
	}
	printf("\n");
	if((fp2=fopen(filename2,"r"))==NULL)
	{
		printf("fopen %s error!\n",filename2);
		exit(0);
	}
	
	printf("file2:\n");
	ch=fgetc(fp2);
	while(ch!=EOF)
	{
		putchar(ch);
		ch=fgetc(fp2);
	}
	printf("\n");
	
	fseek(fp2,0L,0);//将文档2的位置指针移到文件首
	/*
		为什么要加上这句代码呢?
		这是因为在前面的程序中实现了将文档2中的内容逐个读取并显示到屏幕上，
		当将文档2中的全部内容读取后，
		位置指针fp2也就指到了文件末尾处，
		当在接下来的内容中想实现将文档2中的内容逐个合并到文档1中时，
		就必须将文档2中的位置指针fp2.重新移到文档开始处。
	*/
	
	ch=fgetc(fp2);
	while(ch!=EOF)
	{
		fputc(ch,fp1);
		ch=fgetc(fp2);
	}
	printf("\n");
	
	fclose(fp1);
	fclose(fp2);
}

int main()
{
	
	char file1[20],file2[20];
	printf("please input filename1:\n");
	scanf("%s",file1);
	printf("please input filename2:\n");
	scanf("%s",file2);
	mergefile(file1,file2);
	
	return 0;
}
